﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace StuertzDatenbank
{
    public partial class KundendatenGui : Form
    {
        private Kunde aktuellerkunde;
        private DBF dbf;
        private List<Geschlecht> geslechterliste;
        private List<Sprache> spracheliste;
        private List<Ansprechpartner> ansprechpartnerliste;
        private Sprachfile sprachfile;
        private List<Auftrag> kundenaufträge;
        private List<Teil> Kundenteile;


        public KundendatenGui(Benutzer benutzer, Kunde Aktuellerkunde)
        {
            this.benutzer = benutzer;
            this.aktuellerkunde = new Kunde(-1);
            sprachfile = new Sprachfile();

            dbf = new DBF();
            this.aktuellerkunde = dbf.getKundeByID(Aktuellerkunde.getKundennummer());



            geslechterliste = new List<Geschlecht>();
            spracheliste = new List<Sprache>();

            InitializeComponent();
            InitializeComponentChanged();
            AnsprechpartnerChanged();
            componendChange();
            

            rechteverwaltung();
            this.Refresh();
        }

        private void rechteverwaltung()
        {
            
            this.SpeichernButten.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
            this.Loeschenbutten.Visible = benutzer.getRolle().getRechte().Herstellerloeschen;
            this.AnsprechpartnerloeschenButton.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
            this.Ansprechpartnerspeichernbutton.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
            this.NeuerAnsprechpartnerButton.Visible = benutzer.getRolle().getRechte().Herstellerbearbeiten;
           
        }

        private void componendChange()
        {

            ansprechpartnerliste = aktuellerkunde.getAnsprechpartner();
            AnsprechpartnerBox.Items.Clear();
            AnsprechpartnerBox.Items.Add(sprachfile.NeuerAnsprechpartner);
            this.SpeichernButten.Text = sprachfile.Speichern;
            this.Loeschenbutten.Text = sprachfile.Loeschen;

            Clearansprechpartner();
            this.Kundennamebox.Text = aktuellerkunde.getName();
            this.Kundennummerbox.Text = aktuellerkunde.getKundennummer().ToString();

           


            try
            {
                for (int i = 0; i < aktuellerkunde.getAnsprechpartner().Count; i++)
                {
                    this.AnsprechpartnerBox.Items.Add(aktuellerkunde.getAnsprechpartner()[i].getNachname());
                }

            }
            catch (Exception)
            {

                
            }


        }

        private void Clearansprechpartner()
        {
            AnsprechpartnerBox.ResetText();
            Geschlechtbox.ResetText();
            this.Namebox.Text = "";
            this.Vornamebox.Text = "";
            this.Titelbox.Text = "";
            this.Fachbereichbox.Text = "";
            this.Telefon1box.Text = "";
            this.Telefon2box.Text = "";
            this.Emailbox.Text = "";
            this.Faxbox.Text = "";
            this.Kommentarbox.Text = "";
            for (int i = 0; i < SprachecheckedListBox.Items.Count; i++)
            {
                this.SprachecheckedListBox.SetItemChecked(i, false);


            }

        }

        private void AnsprechpartnerChanged()
        {
            ansprechpartnerliste = aktuellerkunde.getAnsprechpartner();
            this.AnsprechpartnerBox.Items.Clear();
            for (int i = 0; i < ansprechpartnerliste.Count; i++)
            {
                this.AnsprechpartnerBox.Items.Add(ansprechpartnerliste[i].getNachname());
            }

            this.Refresh();
        }
        private void InitializeComponentChanged()
        {
            this.Kundennummerbox.Text = aktuellerkunde.getKundennummer().ToString();
            this.Kundennamebox.Text = aktuellerkunde.getName();

            //Geschelcht
            geslechterliste = dbf.alleGeschlechterAusgeben();
            for (int i = 0; i < geslechterliste.Count; i++)
            {
                this.Geschlechtbox.Items.Add(geslechterliste[i].getGeschlecht());
            }
            //Sprache
            spracheliste = dbf.alleSprachenAusgeben();
            for (int i = 0; i < spracheliste.Count; i++)
            {
                this.SprachecheckedListBox.Items.Add(spracheliste[i].getSprache());

            }
            //Ansprechpartner
            ansprechpartnerliste = dbf.getAnsprechparterFromKundeByID(aktuellerkunde.getKundennummer());
            for (int i = 0; i < ansprechpartnerliste.Count; i++)
            {
                AnsprechpartnerBox.Items.Add(ansprechpartnerliste[i].getNachname());
            }
            
            //Kundenaufträge
            kundenaufträge = dbf.kundeAuftraegeAuslesen(aktuellerkunde);
            Auftraegekopierenbutton.Text = sprachfile.Excelexport;
            for (int i = 0; i < kundenaufträge.Count; i++)
            {
                AuftraegedataGridView.Rows.Add(kundenaufträge[i].getAuftragsnummer(), kundenaufträge[i].getZustand().getZustand().ToString());
            }


            //Kundenteile
            Kundenteile = dbf.kundeTeileAuslesen(aktuellerkunde);
            Profilekopierenbutton.Text = sprachfile.Excelexport;
            for (int i = 0; i < Kundenteile.Count; i++)
            {
                TeildataGridView.Rows.Add(Kundenteile[i].getID(), Kundenteile[i].getKundenserie().getSerie(), Kundenteile[i].getKundenbezeichnung(), Kundenteile[i].getBezeichnungProfil());
            }
            this.Refresh();
            
        }

        public Benutzer benutzer { get; set; }

        private void Start_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            startgui gui = new startgui(benutzer);
            this.Dispose();
            gui.ShowDialog();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            this.Visible = false;
            KundeGui gui = new KundeGui(benutzer);
            this.Dispose();
            gui.ShowDialog();

        }

        private void NeuerAnsprechpartnerButton_Click(object sender, EventArgs e)
        {
            NeuerAnsprechpartner();

           
        }

        private void NeuerAnsprechpartner()
        {
            AnsprechpartnerBox.SelectedIndex = 0;
            Geschlechtbox.ResetText();
            
            
            this.Namebox.Text = "";
            this.Vornamebox.Text = "";
            this.Titelbox.Text = "";
            this.Fachbereichbox.Text = "";
            this.Telefon1box.Text = "";
            this.Telefon2box.Text = "";
            this.Emailbox.Text = "";
            this.Faxbox.Text = "";
            this.Kommentarbox.Text = "";
            for (int i = 0; i < SprachecheckedListBox.Items.Count; i++)
            {
                this.SprachecheckedListBox.SetItemChecked(i, false);

            }
        }

        private void Ansprechpartnerspeichernbutton_Click(object sender, EventArgs e)
        {
            Ansprechpartner aktuelleransprechpartner = new Ansprechpartner(-1);

            if (this.AnsprechpartnerBox.SelectedIndex != 0)
            {

                aktuelleransprechpartner.setID(ansprechpartnerliste[AnsprechpartnerBox.SelectedIndex - 1].getID());
                this.aktuellerkunde.getAnsprechpartner().RemoveAt(AnsprechpartnerBox.SelectedIndex - 1);
            }


            aktuelleransprechpartner.setGeschlecht(geslechterliste[this.Geschlechtbox.SelectedIndex]);
            aktuelleransprechpartner.setNachname(this.Namebox.Text);
            aktuelleransprechpartner.setVorname(this.Vornamebox.Text);
            aktuelleransprechpartner.setTitel(this.Titelbox.Text);
            aktuelleransprechpartner.setFachbereich(this.Fachbereichbox.Text);
            aktuelleransprechpartner.setTelefon1(this.Telefon1box.Text);
            aktuelleransprechpartner.setTelefon2(this.Telefon2box.Text);
            aktuelleransprechpartner.setEmail(this.Emailbox.Text);
            aktuelleransprechpartner.setFax(this.Faxbox.Text);
            aktuelleransprechpartner.setKommentar(this.Kommentarbox.Text);

            List<Sprache> aktuellesprachliste = new List<Sprache>();
            for (int i = 0; i < SprachecheckedListBox.Items.Count; i++)
            {
                if (this.SprachecheckedListBox.GetItemChecked(i))
                {

                    aktuellesprachliste.Add(this.spracheliste[i]);

                }
            }
            aktuelleransprechpartner.setSprache(aktuellesprachliste);

            aktuellerkunde.addAnsprechpartner(aktuelleransprechpartner);
            componendChange();
          
        }

        private void AnsprechpartnerloeschenButton_Click(object sender, EventArgs e)
        {
            dbf.AnsprechpartnerLoeschen(ansprechpartnerliste[AnsprechpartnerBox.SelectedIndex - 1]);
            this.aktuellerkunde.getAnsprechpartner().RemoveAt(AnsprechpartnerBox.SelectedIndex - 1);
            componendChange();
        }
        
        private void AnsprechpartnerBox_SelectedIndexChanged(object sender, EventArgs e)
            {
                try
                {
                    if (aktuellerkunde.getAnsprechpartner().Count > 0)
                        {
                            ansprechpartneranzeigen(aktuellerkunde.getAnsprechpartner()[this.AnsprechpartnerBox.SelectedIndex - 1]);

                        }
                }
                catch (Exception)
                {
                
               
                }
           
            }
        
       
        private void ansprechpartneranzeigen(Ansprechpartner ansprechpartner)
        {
            this.Clearansprechpartner();
            for (int i = 0; i < geslechterliste.Count; i++)
            {
                if (Geschlechtbox.Items[i].ToString().Equals(ansprechpartner.getGeschlecht().getGeschlecht()))
                {
                    this.Geschlechtbox.SelectedIndex = i;
                }
            }
            
            
            this.Namebox.Text = ansprechpartner.getNachname();
            this.Vornamebox.Text = ansprechpartner.getVorname();
            this.Titelbox.Text = ansprechpartner.getTitel();
            this.Fachbereichbox.Text = ansprechpartner.getFachbereich();
            this.Telefon1box.Text = ansprechpartner.getTelefon1();
            this.Telefon2box.Text = ansprechpartner.getTelefon2();
            this.Emailbox.Text = ansprechpartner.getEmail();
            this.Faxbox.Text = ansprechpartner.getFax();
            this.Kommentarbox.Text = ansprechpartner.getKommentar();

            for (int j = 0; j < SprachecheckedListBox.Items.Count; j++)
            {
                for (int i = 0; i < ansprechpartner.getSprache().Count; i++)
                {
                    if (SprachecheckedListBox.Items[j].Equals(ansprechpartner.getSprache()[i].getSprache()))
                    {
                        this.SprachecheckedListBox.SetItemChecked(j, true);
                    }
                }
               
               
            }

            this.Refresh();

        }

        private void SpeichernButten_Click(object sender, EventArgs e)
        {
            aktuellerkunde.setKundennummer(int.Parse(this.Kundennummerbox.Text));
            aktuellerkunde.setName(this.Kundennamebox.Text);
            
            //Datenbankaufruf
          
            dbf.kundeBearbeiten(aktuellerkunde,aktuellerkunde);
            componendChange();
            this.Visible = false;
            KundeGui gui = new KundeGui(benutzer);
            this.Dispose();
            gui.ShowDialog();

        }

        private void Loeschenbutten_Click(object sender, EventArgs e)
        {
            if (MessageBox.Show(sprachfile.ObjektLoeschen, sprachfile.ObjektLoeschenKopfzeile, MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                dbf.KundeLoeschen(aktuellerkunde);
                this.Visible = false;
                KundeGui gui = new KundeGui(benutzer);
                this.Dispose();
                gui.ShowDialog();
            }
        }

        private void Auftraegekopierenbutton_Click(object sender, EventArgs e)
        {
            try
            {
                String copystring = "";
                copystring += AuftraegedataGridView.Rows[0].Cells[0].Value.ToString() + "\t" + AuftraegedataGridView.Rows[0].Cells[1].Value.ToString();
                for (int i = 1; i < AuftraegedataGridView.Rows.Count; i++)
                {
                    copystring += "\n" + AuftraegedataGridView.Rows[i].Cells[0].Value.ToString() + "\t" + AuftraegedataGridView.Rows[i].Cells[1].Value.ToString();
                }
                Clipboard.SetText(copystring);
            }
            catch (Exception)
            {
                
                throw;
            }
            
        }

        private void Profilekopierenbutton_Click(object sender, EventArgs e)
        {
            try
            {
                String copystring = "";
                copystring += TeildataGridView.Rows[0].Cells[1].Value.ToString() + "\t" + TeildataGridView.Rows[0].Cells[2].Value.ToString() + "\t" + TeildataGridView.Rows[0].Cells[3].Value.ToString();
            for (int i = 1; i < TeildataGridView.Rows.Count; i++)
            {
                copystring += "\n" + TeildataGridView.Rows[i].Cells[1].Value.ToString() + "\t" + TeildataGridView.Rows[i].Cells[2].Value.ToString() + "\t" + TeildataGridView.Rows[i].Cells[3].Value.ToString();
            }
            Clipboard.SetText(copystring); 
        }
            
            catch (Exception)
            {
                
                throw;
            }   
        }


        private void AuftraegedataGridView_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (AuftraegedataGridView.Rows[e.RowIndex] != null)
            {
                this.Visible = false;
                Auftragserstellunggui gui = new Auftragserstellunggui(this.benutzer, dbf.getAuftrag((int.Parse(AuftraegedataGridView.Rows[e.RowIndex].Cells[0].Value.ToString()))));
                this.Dispose();
                gui.ShowDialog();



            }
        
        }

        private void TeildataGridView_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
             if (TeildataGridView.Rows[e.RowIndex] != null)
             {
                 //this.Visible = false;
                Teilgui gui = new Teilgui(this.benutzer, dbf.TeilAusgeben(int.Parse(TeildataGridView.Rows[e.RowIndex].Cells[0].Value.ToString())));
                // this.Dispose();
                 gui.Show();



             }
         
        }

    }
}
